; $Id$
;; @file
; ???
;

;
; Copyright (C) 2006-2020 Oracle Corporation
;
; This file is part of VirtualBox Open Source Edition (OSE), as
; available from http://www.virtualbox.org. This file is free software;
; you can redistribute it and/or modify it under the terms of the GNU
; General Public License (GPL) as published by the Free Software
; Foundation, in version 2 as it comes in the "COPYING" file of the
; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
; --------------------------------------------------------------------
;
; This code is based on:
;
;  ROM BIOS for use with Bochs/Plex86/QEMU emulation environment
;
;  Copyright (C) 2002  MandrakeSoft S.A.
;
;    MandrakeSoft S.A.
;    43, rue d'Aboukir
;    75002 Paris - France
;    http://www.linux-mandrake.com/
;    http://www.mandrakesoft.com/
;
;  This library is free software; you can redistribute it and/or
;  modify it under the terms of the GNU Lesser General Public
;  License as published by the Free Software Foundation; either
;  version 2 of the License, or (at your option) any later version.
;
;  This library is distributed in the hope that it will be useful,
;  but WITHOUT ANY WARRANTY; without even the implied warranty of
;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;  Lesser General Public License for more details.
;
;  You should have received a copy of the GNU Lesser General Public
;  License along with this library; if not, write to the Free Software
;  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
;
;

; Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
; other than GPL or LGPL is available it will apply instead, Oracle elects to use only
; the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
; a choice of LGPL license versions is made available with the language indicating
; that LGPLv2 or any later version may be used, or where a choice of which version
; of the LGPL is applied is otherwise unspecified.


if BX_PCIBIOS
public _pci_routing_table
public _pci_routing_table_size

align 16
pci_routing_table_structure:
  db '$PIR'  ;; "$PIR" signature
  db 0, 1 ;; version
ifdef VBOX
  dw 32 + (30 * 16) ;; table size
else ; !VBOX
  dw 32 + (6 * 16) ;; table size
endif ; !VBOX
  db 0 ;; PCI interrupt router bus
  db 8 ;; PCI interrupt router DevFunc
  dw 0000h ;; PCI exclusive IRQs
  dw 8086h ;; compatible PCI interrupt router vendor ID
  dw 7000h ;; compatible PCI interrupt router device ID
  dw 0,0 ;; Miniport data
  db 0,0,0,0,0,0,0,0,0,0,0 ;; reserved
ifdef VBOX
  db 0 ;; checksum (set by biossums)
else ; !VBOX
  db 7 ;; checksum
endif ; !VBOX
_pci_routing_table:
pci_routing_table:
  ;; first slot entry PCI-to-ISA (embedded)
  db 0 ;; pci bus number
  db 008h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#: pointer into PCI2ISA config space
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 0 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; second slot entry: 1st PCI slot
  db 0 ;; pci bus number
  db 010h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 1 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; third slot entry: 2nd PCI slot
  db 0 ;; pci bus number
  db 018h ;; pci device number (bit 7-3)
  db 62h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 63h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 60h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 61h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 2 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 4th slot entry: 3rd PCI slot
  db 0 ;; pci bus number
  db 020h ;; pci device number (bit 7-3)
  db 63h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 60h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 61h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 62h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 3 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 5th slot entry: 4th PCI slot
  db 0 ;; pci bus number
  db 028h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 4 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 6th slot entry: 5th PCI slot
  db 0 ;; pci bus number
  db 030h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 5 ;; physical slot (0 = embedded)
  db 0 ;; reserved
ifdef VBOX
  ;; 7th slot entry: 6th PCI slot
  db 0 ;; pci bus number
  db 038h ;; pci device number (bit 7-3)
  db 62h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 63h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 60h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 61h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 6 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 8th slot entry: 7th PCI slot
  db 0 ;; pci bus number
  db 040h ;; pci device number (bit 7-3)
  db 63h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 60h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 61h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 62h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 7 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 9th slot entry: 8th PCI slot
  db 0 ;; pci bus number
  db 048h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 8 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 10th slot entry: 9th PCI slot
  db 0 ;; pci bus number
  db 050h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 9 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 11th slot entry: 10th PCI slot
  db 0 ;; pci bus number
  db 058h ;; pci device number (bit 7-3)
  db 62h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 63h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 60h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 61h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 10 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 12th slot entry: 11th PCI slot
  db 0 ;; pci bus number
  db 60h ;; pci device number (bit 7-3)
  db 63h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 60h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 61h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 62h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 11 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 13th slot entry: 12th PCI slot
  db 0 ;; pci bus number
  db 068h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 12 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 14th slot entry: 13th PCI slot
  db 0 ;; pci bus number
  db 070h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 13 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 15th slot entry: 14th PCI slot
  db 0 ;; pci bus number
  db 078h ;; pci device number (bit 7-3)
  db 62h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 63h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 60h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 61h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 14 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 16th slot entry: 15th PCI slot
  db 0 ;; pci bus number
  db 080h ;; pci device number (bit 7-3)
  db 63h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 60h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 61h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 62h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 15 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 17th slot entry: 16th PCI slot
  db 0 ;; pci bus number
  db 088h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 16 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 18th slot entry: 17th PCI slot
  db 0 ;; pci bus number
  db 090h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 17 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 19th slot entry: 18th PCI slot
  db 0 ;; pci bus number
  db 098h ;; pci device number (bit 7-3)
  db 62h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 63h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 60h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 61h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 18 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 20th slot entry: 19th PCI slot
  db 0 ;; pci bus number
  db 0A0h ;; pci device number (bit 7-3)
  db 63h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 60h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 61h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 62h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 19 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 21st slot entry: 20th PCI slot
  db 0 ;; pci bus number
  db 0A8h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 20 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 22nd slot entry: 21st PCI slot
  db 0 ;; pci bus number
  db 0B0h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 21 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 23rd slot entry: 22nd PCI slot
  db 0 ;; pci bus number
  db 0B8h ;; pci device number (bit 7-3)
  db 62h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 63h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 60h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 61h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 22 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 24th slot entry: 23rd PCI slot
  db 0 ;; pci bus number
  db 0C0h ;; pci device number (bit 7-3)
  db 63h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 60h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 61h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 62h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 23 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 25th slot entry: 24th PCI slot
  db 0 ;; pci bus number
  db 0C8h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 24 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 26th slot entry: 25th PCI slot
  db 0 ;; pci bus number
  db 0D0h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 25 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 27th slot entry: 26th PCI slot
  db 0 ;; pci bus number
  db 0D8h ;; pci device number (bit 7-3)
  db 62h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 63h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 60h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 61h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 26 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 28th slot entry: 27th PCI slot
  db 0 ;; pci bus number
  db 0E0h ;; pci device number (bit 7-3)
  db 63h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 60h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 61h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 62h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 27 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 29th slot entry: 28th PCI slot
  db 0 ;; pci bus number
  db 0E8h ;; pci device number (bit 7-3)
  db 60h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 61h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 62h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 63h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 28 ;; physical slot (0 = embedded)
  db 0 ;; reserved
  ;; 30th slot entry: 29th PCI slot
  db 0 ;; pci bus number
  db 0F0h ;; pci device number (bit 7-3)
  db 61h ;; link value INTA#
  dw 0DEF8h ;; IRQ bitmap INTA#
  db 62h ;; link value INTB#
  dw 0DEF8h ;; IRQ bitmap INTB#
  db 63h ;; link value INTC#
  dw 0DEF8h ;; IRQ bitmap INTC#
  db 60h ;; link value INTD#
  dw 0DEF8h ;; IRQ bitmap INTD#
  db 29 ;; physical slot (0 = embedded)
  db 0 ;; reserved
endif ; VBOX
pci_routing_table_end:
;; Size of the table
_pci_routing_table_size dw	pci_routing_table_end - pci_routing_table

endif   ; BX_PCIBIOS
